package com.insight.common.api;

import com.alibaba.fastjson.JSONObject;
import com.insight.common.system.vo.DynamicDataSourceModel;
import com.insight.common.system.vo.LoginUser;
import com.insight.common.system.vo.SysPermissionDataRuleModel;
import com.insight.common.system.vo.SysUserCacheInfo;

import java.util.List;
import java.util.Set;

/**
 * 通用API接口，提供用户、数据源、权限等相关操作的方法。
 */
public interface CommonAPI {

    /**
     * 查询用户角色信息
     * @param username 用户名
     * @return 角色集合
     */
    Set<String> queryUserRoles(String username);


    /**
     * 查询用户权限信息
     * @param username 用户名
     * @return 权限集合
     */
    Set<String> queryUserAuths(String username);

    /**
     * 根据id查询数据库中存储的DynamicDataSourceModel
     * @param dbSourceId 数据源ID
     * @return 动态数据源模型
     */
    DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId);

    /**
     * 根据code查询数据库中存储的DynamicDataSourceModel
     * @param dbSourceCode 数据源编码
     * @return 动态数据源模型
     */
    DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode);

    /**
     * 根据用户账号查询用户信息
     * @param username 用户名
     * @return 登录用户信息
     */
    public LoginUser getUserByName(String username);


    /**
     * 查询数据权限
     * @param component 组件名
     * @param requestPath 请求路径
     * @param username 用户名
     * @return 数据权限规则列表
     */
    List<SysPermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username);


    /**
     * 查询用户缓存信息
     * @param username 用户名
     * @return 用户缓存信息
     */
    SysUserCacheInfo getCacheUser(String username);


    /**
     * 根据ID集合获取权限数据
     * @param ids ID集合
     * @return 权限数据列表
     */
    List<JSONObject> getPermissionData(List<String> ids);

    /**
     * 根据ID集合获取权限标识
     * @param ids ID集合
     * @return 权限标识列表
     */
    List<String> getPerms(List<String> ids);

    /**
     * 为用户设置权限
     * @param roleSet 角色集合
     * @param ids 权限ID集合
     */
    void setUserPermission(Set<String> roleSet, List<String> ids);
}
